home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
comm
/
term
/
term_source.lha
/
Extras
/
Source
/
term-source.lha
/
ASCIIPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-20
|
9KB
|
446 lines
/*
** ASCIIPanel.c
**
** User interface for built-in ASCII transfer routines
**
** Copyright © 1990-1996 by Olaf `Olsen' Barthel
** All Rights Reserved
**
** :ts=4
*/
#ifndef _GLOBAL_H
#include "Global.h"
#endif
enum { GAD_BYTES=1000,GAD_INFORMATION,GAD_CHARDELAY,GAD_LINEDELAY,
GAD_PACING,GAD_QUIET_TRANSFER,GAD_SKIP,GAD_ABORT
};
STATIC LayoutHandle *ASCIIHandle;
STATIC struct List MessageList;
STATIC LONG MessageCount;
struct Window *
CreateASCIIWindow(BOOL Send)
{
NewList(&MessageList);
MessageCount = 0;
if(ASCIIHandle = LT_CreateHandleTags(Window->WScreen,
LAHN_LocaleHook,&LocaleHook,
TAG_DONE))
{
struct Window *PanelWindow;
LONG WindowLeft,WindowTop,IgnoreWidth,IgnoreHeight;
LT_New(ASCIIHandle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_V36_0000,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, BOX_KIND,
LA_ID, GAD_BYTES,
LABX_FirstLabel, MSG_ASCIIPANEL_BYTES_GAD,
LABX_LastLabel, MSG_ASCIIPANEL_LINES_GAD,
LABX_ReserveSpace, TRUE,
LA_Chars, 50,
TAG_DONE);
LT_New(ASCIIHandle,
LA_Type, LISTVIEW_KIND,
LA_LabelID, MSG_ASCIIPANEL_INFORMATION_GAD,
LA_LabelPlace, PLACE_Left,
LA_ID, GAD_INFORMATION,
LALV_Lines, 2,
LALV_MaxGrowX, 70,
LALV_MaxGrowY, 10,
LALV_CursorKey, TRUE,
GTLV_ReadOnly, TRUE,
GTLV_Labels, &MessageList,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
if(Send)
{
LT_New(ASCIIHandle,
LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_V36_0003,
LAGR_LastAttributes, TRUE,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, SliderType,
LA_LabelID, MSG_ASCIIPANEL_CHAR_DELAY_GAD,
LA_ID, GAD_CHARDELAY,
GTSL_Min, 0,
GTSL_Max, 10 * 100,
LA_WORD, &Config->TransferConfig->CharDelay,
GTSL_LevelFormat, "%s s",
GTSL_DispFunc, StandardShowTime,
TAG_DONE);
LT_New(ASCIIHandle,
LA_Type, SliderType,
LA_LabelID, MSG_ASCIIPANEL_LINE_DELAY_GAD,
LA_ID, GAD_LINEDELAY,
GTSL_Min, 0,
GTSL_Max, 10 * 100,
LA_WORD, &Config->TransferConfig->LineDelay,
GTSL_LevelFormat, "%s s",
GTSL_DispFunc, StandardShowTime,
TAG_DONE);
LT_New(ASCIIHandle,
LA_Type, CYCLE_KIND,
LA_LabelID, MSG_ASCIIPANEL_TEXT_PACING_GAD,
LA_ID, GAD_PACING,
LA_UBYTE, &Config->TransferConfig->PacingMode,
LACY_FirstLabel, MSG_ASCIIPANEL_DIRECT_TXT,
LACY_LastLabel, MSG_ASCIIPANEL_KEYDELAY_TXT,
TAG_DONE);
LT_New(ASCIIHandle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_ASCIIPANEL_QUIET_TRANSFER_GAD,
LA_ID, GAD_QUIET_TRANSFER,
LA_BYTE, &Config->TransferConfig->QuietTransfer,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
LT_New(ASCIIHandle,
LA_Type,VERTICAL_KIND,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
LT_New(ASCIIHandle,LA_Type,HORIZONTAL_KIND,
LAGR_SameSize, TRUE,
LAGR_Spread, TRUE,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
LA_ID, GAD_SKIP,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_New(ASCIIHandle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
LA_ID, GAD_ABORT,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
}
else
{
LT_New(ASCIIHandle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
LT_New(ASCIIHandle,
LA_Type, HORIZONTAL_KIND,
TAG_DONE);
{
LT_New(ASCIIHandle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
LA_ID, GAD_ABORT,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(ASCIIHandle);
}
}
LT_EndGroup(ASCIIHandle);
}
GetWindowInfo(WINDOW_FILETRANSFER,&WindowLeft,&WindowTop,&IgnoreWidth,&IgnoreHeight,0,0);
if(PanelWindow = LT_Build(ASCIIHandle,
LAWN_TitleText, Send ? LocaleString(MSG_ASCIIPANEL_SENDING_TXT) : LocaleString(MSG_ASCIIPANEL_RECEIVING_TXT),
LAWN_HelpHook, &GuideHook,
LAWN_Parent, Window,
LAWN_Left, WindowLeft,
LAWN_Top, WindowTop,
LAWN_LimitWidth, WindowWidth,
LAWN_LimitHeight, WindowHeight,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_RMBTrap, TRUE,
WA_SimpleRefresh, TRUE,
TAG_DONE))
{
BOOL Activate,Move;
GuideContext(CONTEXT_ASCII);
if(Config->MiscConfig->AlertMode == ALERT_SCREEN || Config->MiscConfig->AlertMode == ALERT_BEEP_SCREEN)
Move = Activate = TRUE;
else
{
ULONG IntuiLock;
Move = FALSE;
IntuiLock = LockIBase(NULL);
if(IntuitionBase->ActiveScreen == PanelWindow->WScreen)
Activate = TRUE;
else
Activate = FALSE;
UnlockIBase(IntuiLock);
}
if(Move)
{
if(PanelWindow->WScreen->LeftEdge > 0)
{
if(PanelWindow->WScreen->TopEdge > 0)
MoveScreen(PanelWindow->WScreen,-PanelWindow->WScreen->LeftEdge,-PanelWindow->WScreen->TopEdge);
else
MoveScreen(PanelWindow->WScreen,-PanelWindow->WScreen->LeftEdge,0);
}
else
{
if(PanelWindow->WScreen->TopEdge > 0)
MoveScreen(PanelWindow->WScreen,0,-PanelWindow->WScreen->TopEdge);
}
WindowToFront(PanelWindow);
ScreenToFront(PanelWindow->WScreen);
}
if(Activate)
ActivateWindow(PanelWindow);
PushWindow(PanelWindow);
return(PanelWindow);
}
LT_DeleteHandle(ASCIIHandle);
ASCIIHandle = NULL;
}
return(NULL);
}
VOID
DeleteASCIIWindow(struct Window *Window,BOOL WaitForIt)
{
if(WaitForIt && Window && ASCIIHandle)
{
struct IntuiMessage *Message;
struct Gadget *MsgGadget;
ULONG MsgClass;
BOOL Done;
LONG i;
for(i = GAD_CHARDELAY ; i <= GAD_SKIP ; i++)
LT_SetAttributes(ASCIIHandle,i,GA_Disabled,TRUE,TAG_DONE);
Done = FALSE;
do
{
if(Wait(PORTMASK(Window->UserPort) | SIG_BREAK) & SIG_BREAK)
break;
while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
{
MsgClass = Message->Class;
MsgGadget = (struct Gadget *)Message->IAddress;
LT_ReplyIMsg(Message);
if(MsgClass == IDCMP_GADGETUP && MsgGadget->GadgetID == GAD_ABORT)
Done = TRUE;
}
}
while(!Done);
}
if(Window && ASCIIHandle)
PopWindow();
if(ASCIIHandle)
{
PutWindowInfo(WINDOW_FILETRANSFER,ASCIIHandle->Window->LeftEdge,ASCIIHandle->Window->TopEdge,ASCIIHandle->Window->Width,ASCIIHandle->Window->Height);
LT_DeleteHandle(ASCIIHandle);
ASCIIHandle = NULL;
}
if(MessageCount)
{
FreeList(&MessageList);
MessageCount = 0;
}
}
VOID
AddASCIIMessage(STRPTR Message,...)
{
UBYTE TempBuffer[256];
struct Node *Node;
va_list VarArgs;
va_start(VarArgs,Message);
LimitedVSPrintf(sizeof(TempBuffer),TempBuffer,Message,VarArgs);
va_end(VarArgs);
if(Node = CreateNode(TempBuffer))
{
if(MessageCount == 100)
{
FreeVecPooled(RemHead(&MessageList));
MessageCount = 99;
}
LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
GTLV_Labels,~0,
TAG_DONE);
AddTail(&MessageList,Node);
LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
GTLV_Labels,&MessageList,
Kick30 ? GTLV_MakeVisible : GTLV_Top,MessageCount,
TAG_DONE);
MessageCount++;
}
}
VOID
UpdateASCIIWindow(LONG Bytes,LONG MaxBytes,LONG Lines)
{
if(Bytes != -1)
{
UBYTE LocalBuffer[40];
if(MaxBytes)
{
LONG Percent = (100 * Bytes) / MaxBytes;
if(Percent > 100)
Percent = 100;
if(LocaleBase)
LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,"%lD (%ld%%)",Bytes,Percent);
else
LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,"%ld (%ld%%)",Bytes,Percent);
}
else
LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,ConvNumber,Bytes);
LT_SetAttributes(ASCIIHandle,GAD_BYTES,
LABX_Index, 0,
LABX_Text, LocalBuffer,
TAG_DONE);
}
if(Lines != -1)
{
UBYTE LocalBuffer[40];
LimitedSPrintf(sizeof(LocalBuffer),LocalBuffer,ConvNumber,Lines);
LT_SetAttributes(ASCIIHandle,GAD_BYTES,
LABX_Index, 1,
LABX_Text, LocalBuffer,
TAG_DONE);
}
}
BOOL
HandleASCIIWindow()
{
struct IntuiMessage *Message;
struct Gadget *MsgGadget;
ULONG MsgClass;
while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
{
MsgClass = Message->Class;
MsgGadget = (struct Gadget *)Message->IAddress;
LT_ReplyIMsg(Message);
if(MsgClass == IDCMP_MOUSEMOVE)
{
SendSetup();
ConfigChanged = TRUE;
}
if(MsgClass == IDCMP_GADGETUP)
{
switch(MsgGadget->GadgetID)
{
case GAD_PACING:
case GAD_CHARDELAY:
case GAD_LINEDELAY:
ASCIISendSetup();
ConfigChanged = TRUE;
break;
case GAD_QUIET_TRANSFER:
ConfigChanged = TRUE;
break;
case GAD_ABORT:
return(1);
case GAD_SKIP:
return(2);
}
}
}
return(0);
}